package com.yitong.framework.utils;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.imageio.ImageIO;  
  
/** 
 * 算出图片主色值 
 * */  
public class MainColor {  
  
    public static String getImagePixel(String imgFile)  {  
        int R=0;  
        int G=0;  
        int B=0;  
        File file = new File(imgFile);  
        List<String> list=new ArrayList<String>();  
        BufferedImage bi = null;  
        try {  
            bi = ImageIO.read(file);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        int width = bi.getWidth();  
        int height = bi.getHeight();  
        int sum=width*height;  
        int minx = bi.getMinX();  
        int miny = bi.getMinY();  
        for (int i = minx; i < width; i++) {  
            for (int j = miny; j < height; j++) {  
                int pixel = bi.getRGB(i, j);   
                R=(pixel & 0xff0000) >> 16;  
                G=(pixel & 0xff00) >> 8;  
                B=(pixel & 0xff);  
                list.add(R+"-"+G+"-"+B);  
            }  
        }  
        System.out.println(list.get(0));
        String[] split = list.get(0).split("-");
		System.out.println(split);
        System.out.println("第一个颜色值"+getB16(Integer.parseInt(split[0]), Integer.parseInt(split[1]),Integer.parseInt(split[2])));
        //获取图片主色
        //return getMaxCount(list); 
        //获取图片第一个颜色值
        return getB16(Integer.parseInt(split[0]), Integer.parseInt(split[1]),Integer.parseInt(split[2]));
    }  
      
      
    /*** 
     * 失败的循环方法 
     * */  
//  public static String getMaxCount(List<String> list){  
//      String regex;  
//      Pattern p;  
//      Matcher m;  
//      String tmp = "";          
//      String tot_str = list.toString();  
//      int max_cnt = 0;  
//      String max_str = "";  
//      for(String str : list) {  
//          if (tmp.equals(str)) continue;            
//          tmp = str;  
//          regex = str;  
//          p = Pattern.compile(regex);  
//          m = p.matcher(tot_str);  
//          int cnt = 0;  
//          while(m.find()) {  
//              cnt++;  
//          }  
//          if (cnt > max_cnt) {  
//              max_cnt = cnt;  
//              max_str = str;  
//          }  
//      }         
//      String  str[] = max_str.split("\\-");  
//      if(str.length ==3){  
//          return getB16(Integer.parseInt(str[0]),Integer.parseInt(str[1]),Integer.parseInt(str[2]));  
//      }  
//       return "";  
//  }  
  
    /** 
     * 成功的循环方法 
     * */  
    public static String getMaxCount(List<String> s) {  
        List<String> list = s;  
        Map<String, Integer> map = new HashMap<String, Integer>();  
        for (String c : list) {  
            Integer l = map.get(c);  
            if (l == null)  
                l = 1;  
            else  
                l++;  
            map.put(c, l);  
        }  
        String max = null;  
        long num = 0;  
        for (Map.Entry<String, Integer> entry : map.entrySet()) {  
            String key = entry.getKey();  
            Integer temp = entry.getValue();  
            if (max == null || temp > num) {  
                max = key;  
                num = temp;  
            }  
        }  
        String str[] = max.split("\\-");  
        if (str.length == 3) {  
            return getB16(Integer.parseInt(str[0]), Integer.parseInt(str[1]),  
                    Integer.parseInt(str[2]));  
        }  
        return "";  
    }  
  
      
    private static String getB16(int R,int G,int B){  
        String[] h=new String[256];  
       h[0]="00";h[1]="01";h[2]="02";h[3]="03";h[4]="04";h[5]="05";  
       h[6]="06";h[7]="07";h[8]="08";h[9]="09";h[10]="0A";h[11]="0B";  
       h[12]="0C";h[13]="0D";h[14]="0E";h[15]="0F";h[16]="10";h[17]="11";  
       h[18]="12";h[19]="13";h[20]="14";h[21]="15";h[22]="16";h[23]="17";  
       h[24]="18";h[25]="19";h[26]="1A";h[27]="1B";h[28]="1C";h[29]="1D";  
       h[30]="1E";h[31]="1F";h[32]="20";h[33]="21";h[34]="22";h[35]="23";  
       h[36]="24";h[37]="25";h[38]="26";h[39]="27";h[40]="28";h[41]="29";  
       h[42]="2A";h[43]="2B";h[44]="2C";h[45]="2D";h[46]="2E";h[47]="2F";  
       h[48]="30";h[49]="31";h[50]="32";h[51]="33";h[52]="34";h[53]="35";  
       h[54]="36";h[55]="37";h[56]="38";h[57]="39";h[58]="3A";h[59]="3B";  
       h[60]="3C";h[61]="3D";h[62]="3E";h[63]="3F";h[64]="40";h[65]="41";  
       h[66]="42";h[67]="43";h[68]="44";h[69]="45";h[70]="46";h[71]="47";  
       h[72]="48";h[73]="49";h[74]="4A";h[75]="4B";h[76]="4C";h[77]="4D";  
       h[78]="4E";h[79]="4F";h[80]="50";h[81]="51";h[82]="52";h[83]="53";  
       h[84]="54";h[85]="55";h[86]="56";h[87]="57";h[88]="58";h[89]="59";  
       h[90]="5A";h[91]="5B";h[92]="5C";h[93]="5D";h[94]="5E";h[95]="6F";  
       h[96]="60";h[97]="61";h[98]="62";h[99]="63";h[100]="64";h[101]="65";  
       h[102]="66";h[103]="67";h[104]="68";h[105]="69";h[106]="6A";h[107]="6B";  
       h[108]="6C";h[109]="6D";h[110]="6E";h[111]="6F";h[112]="70";h[113]="71";  
       h[114]="72";h[115]="73";h[116]="74";h[117]="75";h[118]="76";h[119]="77";  
       h[120]="78";h[121]="79";h[122]="7A";h[123]="7B";h[124]="7C";h[125]="7D";  
       h[126]="7E";h[127]="7F";h[128]="80";h[129]="81";h[130]="82";h[131]="83";  
       h[132]="84";h[133]="85";h[134]="86";h[135]="87";h[136]="88";h[137]="89";  
       h[138]="8A";h[139]="8B";h[140]="8C";h[141]="8D";h[142]="8E";h[143]="8F";  
       h[144]="90";h[145]="91";h[146]="92";h[147]="93";h[148]="94";h[149]="95";  
       h[150]="96";h[151]="97";h[152]="98";h[153]="99";h[154]="9A";h[155]="9B";  
       h[156]="9C";h[157]="9D";h[158]="9E";h[159]="9F";h[160]="A0";h[161]="A1";  
       h[162]="A2";h[163]="A3";h[164]="A4";h[165]="A5";h[166]="A6";h[167]="A7";  
       h[168]="A8";h[169]="A9";h[170]="AA";h[171]="AB";h[172]="AC";h[173]="AD";  
       h[174]="AE";h[175]="AF";h[176]="B0";h[177]="B1";h[178]="B2";h[179]="B3";  
       h[180]="B4";h[181]="B5";h[182]="B6";h[183]="B7";h[184]="B8";h[185]="B9";  
       h[186]="BA";h[187]="BB";h[188]="BC";h[189]="BD";h[190]="BE";h[191]="BF";  
       h[192]="C0";h[193]="C1";h[194]="C2";h[195]="C3";h[196]="C4";h[197]="C5";  
       h[198]="C6";h[199]="C7";h[200]="C8";h[201]="C9";h[202]="CA";h[203]="CB";  
       h[204]="CC";h[205]="CD";h[206]="CE";h[207]="CF";h[208]="D0";h[209]="D1";  
       h[210]="D2";h[211]="D3";h[212]="D4";h[213]="D5";h[214]="D6";h[215]="D7";  
       h[216]="D8";h[217]="D9";h[218]="DA";h[219]="DB";h[220]="DC";h[221]="DD";  
       h[222]="DE";h[223]="DF";h[224]="E0";h[225]="E1";h[226]="E2";h[227]="E3";  
       h[228]="E4";h[229]="E5";h[230]="E6";h[231]="E7";h[232]="E8";h[233]="E9";  
       h[234]="EA";h[235]="EB";h[236]="EC";h[237]="ED";h[238]="EE";h[239]="EF";  
       h[240]="F0";h[241]="F1";h[242]="F2";h[243]="F3";h[244]="F4";h[245]="F5";  
       h[246]="F6";h[247]="F7";h[248]="F8";h[249]="F9";h[250]="FA";h[251]="FB";  
       h[252]="FC";h[253]="FD";h[254]="FE";h[255]="FF";  
       return "#"+h[R] + h[G] + h[B];  
    }  
      
      
    public static void main(String[] args) {  
            System.out.println(getImagePixel("E:\\eclipse-workspace\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp1\\wtpwebapps\\ESTshopping\\bannerimage\\5ef3fa246aca4deb8df8aec391de2986.jpg"));  
    }  
}  